#include <iostream>
#include <thread>
#include <functional>
#include <chrono>
#include <mutex>
#include <condition_variable>

// 模拟异步操作
void asyncOperation(std::function<void(std::string)> callback, std::condition_variable& cv, bool& done, std::mutex& mtx) {
    std::this_thread::sleep_for(std::chrono::seconds(2));  // 模拟耗时任务

    // 操作完成后调用回调函数
    callback("Operation complete");

    // 通知主线程任务完成
    {
        std::lock_guard<std::mutex> lock(mtx);
        done = true;
    }
    cv.notify_one();  // 通知条件变量
}

int main() {
    std::mutex mtx;
    std::condition_variable cv;
    bool done = false;

    // 创建线程执行异步操作
    std::thread asyncThread(asyncOperation, [](std::string result) {
        std::cout << "Callback: " << result << std::endl;
    }, std::ref(cv), std::ref(done), std::ref(mtx));

    // 等待异步操作完成
    {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, [&done] { return done; });
    }

    std::cout << "Async operation finished." << std::endl;

    asyncThread.join();  // 等待线程完成

    return 14;
}